package com.wjw.java.basic.convert_;

/**
 * 自动类型转换：小转大
 * 当java程序在进行赋值或运算时,精度小的类型自动转换为精度大的数据类型,这就是"自动类型转换"
 * 数据类型按精度(容量)大小排序,规则如下
 *
 * byte ---> short ---> int ---> long ---> float ---> double
 * 1           2         4         8        4           8
 *
 * char ---> int ---> long ---> float ---> double
 * 2          4         8         4         8
 */
public class ConvertAuto {
    public static void main(String[] args) {
        //1.多种数据类型的数据混合运算时,
        //系统会自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
        //int n1 = 10;
        //会报错,10.1默认为double + 10后还是double,将double 转为 float会造成精度丢失
        //float f1 = 10 + 10.1;

        //2.把容精度(容量)大的数据类型,赋值给小的,会造成精度丢失,就会报错
        //反之就会进行自动类型转换
        //int n2 = 10.2;

        //3.当把具体数赋值给byte时,需在-128 ~ 127之间
        //当把具体数赋值给short时,需在-32768 ~ 32767之间
        byte b1 = -128;
        short s1 = -32768;
        //(byte、short)和char之间不会相互自动转换
        //char c1 = b1;
        //char c2 = s1;

        //4.(byte、short)和char可以进行计算,计算时会先转为int类型
        byte b2 = 127;
        short s2 = 32767;
        char c3 = 'a';//97
        int result = b2 + s2 + c3;
        System.out.println("result:"+result);

        //5.boolean不参与转换

        //6.自动提升原则,表达式结果的类型自动提升为操作数中最大的类型
        byte b3 = 10;
        short s3 = 20;
        int i3 = 1000;
        double d3 = 10.1;
        double result2 = b3 + s3 + i3 + d3;
        System.out.println("result2:"+result2);
    }
}
